from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Product
from .serializers import ProductSerializer
import jwt
from django.conf import settings
from django.core.paginator import Paginator

# Create your views here.
'''
封装添加商品接口：POST 
①参数说明：product_id, name, description, price, stock, category_id，token为必填项，is_available不在入参范围内。 
②逻辑说明： 
a)判断product_id是否存在，如果存在，则返回不允许添加。 （ID在模型里添加后，接口有冲突）
b)添加成功后入库，is_available默认为True，create_time为当前时间。 
c)判断商品分类表中category_id是否存在，如果不存在，则返回不允许添加。（ID在模型里添加后，接口有冲突）
d)判断token是否存在，如果不存在，则不允许添加。
'''

class ProductAddView(APIView):
    def post(self, request):
        # 获取token是否存在
        token = request.headers.get('Authorization')
        if not token:
            return Response({"message": "token为空时不允许添加商品"}, status=status.HTTP_401_UNAUTHORIZED)
        # 解析token
        jwt.decode(token, settings.SECRET_KEY, algorithms='HS256')
        # 创建商品序列化
        product_serializer = ProductSerializer(data=request.data)
        if product_serializer.is_valid(raise_exception=True):
            # 检查分类ID是否存在
            # if Product.objects.filter(category_id=request.data['category']).exists():
            #     return Response({'msg': '添加失败，商品分类不存在'}, status=status.HTTP_400_BAD_REQUEST)
            # 检查商品ID是否存在
            if Product.objects.filter(name=request.data['name']).exists():
                return Response({'msg': '添加失败，商品ID已存在'}, status=status.HTTP_400_BAD_REQUEST)
            product_serializer.save()
            return Response({'msg': '添加成功',
                             'data':product_serializer.data}, status=status.HTTP_201_CREATED)

'''
(4)封装商品列表查询接口：GET
①参数说明：_page,_per_page为翻页参数，非必填项。 
②逻辑要求：
a)返回当前页的商品列表数据。 
b)支持翻页功能，默认每页显示10条数据。 
c)查询不到数据时，要有合理的逻辑处理和状态码。 
d)product_id字段不允许返回。
③列表页面，前端要求：
翻页功能正常：总条数，总页数，翻页等
'''
class ProductListView(APIView):
    def get(self, request):
        page = int(request.query_params.get('_page',1))
        per_page = int(request.query_params.get('_per_page',10))
        # 获取商品列表
        product_list = Product.objects.all()
        paginator = Paginator(product_list, per_page)
        paginator = paginator.page(page)
        # 创建商品序列化
        product_serializer = ProductSerializer(paginator, many=True)
        return Response({
            'msg': '获取成功',
            'data': product_serializer.data
        })